#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "Key.h"

struct s_Key
{
	char clave[KEY_MAX_LENGTH];
	int size;
};

int
key_maxLen (void)
{
	return KEY_MAX_LENGTH;
}

/* construye un Key desde un string */
Key
key_fromString (char *s)
{
	Key k;
	k = (Key)calloc(1,sizeof(struct s_Key));
		
	if(k == NULL)
		return NULL;

	strncpy(k -> clave,s,key_maxLen());
	k -> size = strlen(s);
	return k;
}

void
key_toString (Key k, char *s)
{
	assert(k != NULL);
	strncpy(s,k -> clave,k -> size+1);
}

/* devuelve la longitud del string en k */
int
key_length (Key k)
{
	if(k == NULL)
		return 0; 
	return k -> size;
}

/* pregunta si las claves son iguales */
Bool
key_eq (Key k1, Key k2)
{
	if(k1 == NULL || k2 == NULL)
		return FALSE;
	if(strcmp(k1 -> clave,k2 -> clave) == 0)
		return TRUE;
	else
		return FALSE;
}

/* pregunta si la primera clave es menor que la segunda */
Bool
key_le (Key k1, Key k2)
{
	if(k1 == NULL || k2 == NULL)
		return FALSE;
	if(strcmp(k1 -> clave,k2 -> clave) < 0)
		return TRUE;
	else
		return FALSE;
}

/* devuelve un copia */
Key
key_clone (Key k)
{
	if (k == NULL)
		return  NULL;
	return key_fromString(k -> clave);
}

/* Destructor */
Key
key_destroy(Key k)
{
	if(k == NULL)
		return NULL;
	free(k);
	k = NULL;
	return NULL;
}
